package com.treeroot.designMode.Decorator;

/**
 * @author treeroot
 * 抽象装饰角色
 * Decorator，装饰抽象类继承了Component，从外类来扩展Component类的功能,但对于Component来说，是无需知道Decorator的存在的
 */

abstract class Decorator implements Component {
    /**
     * 注入抽象构件类型的对象
     * 为什么要注入他？目的是任然保持父类的使用即--->不破坏原有的类结构
     * 当子类继承Decorator时，可以通过super调用父类的构造方法，在子类中获得注入一个抽象构件类型的对象
     * 从而可以在子类中继续优先调用父类的operation方法，然后再执行本类的功能，对原有功能进行了装饰
     */

    private final Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    /**
     * 重写operation方法，实际执行的是Component的operation方法
     */
    @Override
    public void operation() {
        component.operation();
    }
}
